import createDOMElement from './createDOMElement';
import { unMountNode } from './utils';

/*
 * @author: yang long
 * @date: 2022-07-19 14:23:57
 * @description: 挂载 jsx 转换后的 虚拟dom 的方法
 * @virtualDOM {type}: 虚拟dom
 * @container {type}: 要挂载的 html 节点
 */
export default function mountNativeElement(virtualDOM, container, oldDOM) {
  const newElement = createDOMElement(virtualDOM);

  if (oldDOM) {
    container.insertBefore(newElement, oldDOM);
  } else {
    // 转换后的 dom 添加到 容器里面
    container.appendChild(newElement);
  }

  // 判断旧的DOM对象是否存在 如果存在 删除
  if (oldDOM) {
    unMountNode(oldDOM);
  }

  // 类组件会有这个 component
  let component = virtualDOM.component;
  if (component) {
    // 把最终的 DOM 传给了 组件内部
    component.setDOM(newElement);
  }
}
